const cart = require("../sql/cart");
const sql = require("../sql");
const uuid = require("uuid");
const jwt = require("jsonwebtoken");

module.exports = (req,res)=>{
    const {token, goodsId, num} = req.body;
    // 解析并验证token
    jwt.verify(token, "杨树林er", (err, data)=>{
        if(err){
            res.send({code:0, msg:"登录失效"});
        }else{
            // 先按照当前用户名，读取购物车集合
            sql.get({
                colObj: cart,
                where:{ username: data.username }
            }).then(result=>{
                // 深拷贝读取到的数据，以备后续修改
                const arr = [...result];
                // 以当前用户名读到了购物车数据
                if(arr.length > 0){
                    // 提前将当前用户对应的购物车数据中的商品数据部分，单独保存出来
                    const gArr = arr[0].goodsData;
                    // 从商品数据中判断，本次添加的商品，是否是重复商品
                    let i = 0;
                    const flag = gArr.some((val,idx)=>{
                        i = idx;
                        return val.goodsId === goodsId;
                    })
                    if(flag){
                        // 是重复商品，只增加数量
                        gArr[i].num++;
                    }else{
                        // 不是重复商品，在商品数据中，增加一个新商品
                        gArr.push({
                            goodsId: goodsId,
                            num: 1,
                            check: false
                        })
                    }
                    // 一定要将操作之后的商品数据修改会购物车集合
                    sql.set(cart, {username: data.username}, {
                        goodsData: gArr
                    }).then(()=>{
                        res.send({code:1, msg:"再次加入购物车成功"});
                    })
                }else{  // 以当前用户名没读到购物车数据
                    // 直接在购物车集合中添加一条新数据
                    sql.add(cart, {
                        cartId: "cart-" + uuid.v1(),
                        username: data.username,
                        goodsData: [{
                            goodsId: goodsId,
                            num: 1,
                            check: false
                        }]
                    }).then(()=>{
                        res.send({code:1, msg:"第一次加入购物车成功"});
                    })
                }
            })
        }
    })
}

[{
    id:"abc",
    num:2
},{
    id:"qwe",
    num:1
}]